home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Softdisk G-S 88
/
SGDS 88.2mg
/
SDGS.88
/
SDC88
/
C
/
SOUNDMAKER2
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Applesoft BASIC Source Code
|
1988-12-25
|
12.8 KB
|
606 lines
|
[FC] Applesoft BASIC Program (0x0801)
0 LOMEM: 28672
1 CLEAR : DIM A(500),A$(13),L(8),V(4),I$(7),VT(3),HT(3),PV(8,4)
2 COLOR= 0: HCOLOR= 0
3 PRINT CHR$(21): TEXT : HOME : HGR2
5 PRINT CHR$(4)"BLOADSOUNDPLAY"
6 PRINT CHR$(4)"BLOADBOX.SHADOW"
8 PRINT CHR$(4)"BRUNBASH.STD"
9 POKE 48688, PEEK(0): POKE 48689, PEEK(1)
10 PRINT CHR$(4)"BLOADLIBRARY,A$6500"
12 INVERSE
15 BOX = 24576
20 LOC = 26112:GO = LOC
25 GOSUB 14000
30 TEST = 26032
35 BEEP = 26064
40 POKE TEST,32: POKE LOC,32:LOC = LOC +1
50 POKE TEST +1,0: POKE LOC,0:LOC = LOC +1
60 POKE TEST +2,101: POKE LOC,101:LOC = LOC +1
70 POKE TEST +3,96: POKE LOC,96:LOC = LOC +1
80 POKE TEST +4,0: FOR I = 0 TO 4: POKE LOC +I,0: NEXT
90 LHI = LOC
95 FOR I = 0 TO 3: POKE BEEP +I, PEEK(TEST +I): NEXT : POKE BEEP +4,5: POKE BEEP +5,235: POKE BEEP +6,8: POKE BEEP +7,0
100 REM <CTRL-0x0a>read data<CTRL-0x0a>
110 FOR I = 1 TO 13: READ A$(I): NEXT
120 FOR I = 1 TO 8: READ L(I): NEXT
130 FOR I = 1 TO 6: READ I$(I): NEXT
140 FOR I = 0 TO 3: READ VT(I),HT(I): NEXT
145 FOR I = 1 TO 6: READ DD$:DD$(I) = " " +DD$ +" ": NEXT
150 HI = 0:TB = 0:BB = 0:PT = 0:TN = 0
160 PV(8,1) = 200:CS$ = "_ ":B$ = "0123456789ABCDEF"
200 REM <CTRL-0x0a>screen setup<CTRL-0x0a>
210 CALL BOX,1,1,40,24
220 VTAB 2: HTAB 4: PRINT "Soundmaker II (c) 1988 Softdisk."
230 CALL BOX,2,3,20,16
240 PRINT " Selections Box";
250 CALL BOX,2,19,38,5
260 GOSUB 800
280 FOR S = 1 TO 13: VTAB 4 +S: HTAB 4: PRINT A$(S): NEXT
290 S = 1
300 REM <CTRL-0x0a>Program start<CTRL-0x0a>
305 TS = 13: POKE 49168,0
310 GOSUB 2000
320 GOSUB 3000
330 IF K$ = CHR$(27) THEN S = 13
340 IF S <9 THEN 400
350 ON S -8 GOSUB 9500,9900,11000,12000,13000
360 GOTO 300
400 GOSUB 6000:V(0) = S
410 GOSUB 5000
420 PT = PT +1
430 A(PT) = V(0)
440 GOSUB 9000: GOSUB 7500
490 GOTO 300
800 CALL BOX,22,3,18,16
810 PRINT " Edit box #"
820 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24
825 GOSUB 8500
830 RETURN
999 END
1000 REM <CTRL-0x0a>center ms$<CTRL-0x0a>
1010 HTAB INT( PEEK(33)/2 +1) - INT( LEN(MS$)/2): PRINT MS$
1020 RETURN
1500 REM <CTRL-0x0a>CHANGE HEX TO DECIMAL<CTRL-0x0a>
1505 ADDR = 0
1510 FOR I = 1 TO LEN(AD$):D$ = MID$ (AD$,I,1): IF D$ >"Z" THEN D$ = CHR$( ASC(D$) -32)
1520 FOR PA = 1 TO LEN(B$)
1530 IF D$ < > MID$ (B$,PA,1) THEN NEXT PA
1540 ADDR = ADDR +(PA -1) *16 ^( LEN(AD$) -I)
1550 NEXT I
1570 RETURN
2000 REM <CTRL-0x0a>Bottom box<CTRL-0x0a>
2010 GOSUB 2500
2020 VTAB 20:MS$ = "Arrows move highlight,": GOSUB 1000
2030 MS$ = "RETURN Selects, ESC Exits.": GOSUB 1000
2040 RETURN
2500 FOR I = 20 TO 22: VTAB I: HTAB 3: PRINT SPC( 36): NEXT : RETURN
2800 REM <CTRL-0x0a>Edit Message<CTRL-0x0a>
2810 GOSUB 2500
2820 VTAB 20:MS$ = "Arrows move highlight, '<' pages up,": GOSUB 1000
2830 MS$ = "'>' pages down, RETURN edits item,": GOSUB 1000
2840 MS$ = "I)nsert, D)elete, ESC stops editing.": GOSUB 1000
2850 RETURN
3000 REM <CTRL-0x0a>flashing getbox1<CTRL-0x0a>
3010 VTAB 4 +S: HTAB 3: NORMAL : PRINT " "A$(S)" "
3020 FOR PA = 0 TO 50: IF PEEK(49152) <128 THEN NEXT
3030 VTAB 4 +S: HTAB 3: INVERSE : PRINT " "A$(S)" "
3040 FOR PA = 0 TO 10: IF PEEK(49152) <128 THEN NEXT : GOTO 3010
3050 GET K$
3060 IF K$ = CHR$(13) THEN 3150
3065 IF K$ = CHR$(27) THEN 3160
3070 IF K$ = CHR$(8) OR K$ = CHR$(11) THEN S = S -1: GOTO 3100
3080 IF K$ = CHR$(10) OR K$ = CHR$(21) THEN S = S +1: GOTO 3100
3090 GOSUB 4000
3100 IF S >TS THEN S = 1
3110 IF S <1 THEN S = TS
3120 GOTO 3000
3150 NORMAL : VTAB 4 +S: HTAB 3: PRINT " "A$(S)" ": INVERSE
3160 RETURN
3500 REM <CTRL-0x0a>CALCULATE HB,LB<CTRL-0x0a>
3510 HB = INT(ADDR/256):LB = ADDR -(HB *256)
3520 RETURN
4000 REM <CTRL-0x0a>buzz<CTRL-0x0a>
4010 CALL BEEP: RETURN
4500 REM <CTRL-0x0a>clear<CTRL-0x0a>
4510 FOR I = 0 TO PT:A(I) = 0: NEXT
4520 PT = 0:LOC = GO +4
4530 FOR I = 0 TO 4: POKE LOC +I,0: NEXT
4540 RETURN
5000 REM <CTRL-0x0a>input note data<CTRL-0x0a>
5005 S = V(0)
5010 GOSUB 2500
5020 VTAB 20: HTAB 4: PRINT A$(S)
5030 IF L(S) <2 THEN 5300
5040 ND = (L(S) = 4) *2 +(L(S) = 2) *5
5050 FOR I = 1 TO L(S) -1
5060 CV = I: IF L(S) = 4 THEN CV = I +(I = 2) -(I = 3)
5065 IF V(CV) = 0 THEN V(CV) = PV(S,CV)
5070 VTAB VT(I): HTAB HT(I): PRINT I$(I +ND)": ";V(CV)
5080 NEXT
5090 FOR I = 1 TO L(S) -1
5092 BV = 0:TV = 256
5093 CV = I: IF L(S) = 4 THEN CV = I +(I = 2) -(I = 3): IF CV = 1 THEN BV = (S = 3) +(S = 6):TV = 256 -(S = 4) -(S = 7)
5095 IF CV <3 THEN 5100
5096 IF S = 4 OR S = 7 THEN BV = V(1)
5097 IF S = 3 OR S = 6 THEN TV = V(1)
5100 VTAB VT(I): HTAB HT(I): PRINT I$(I +ND)": ";
5110 VA = V(CV): GOSUB 5500
5120 IF VA <0 THEN 5200
5130 V(CV) = VA
5140 NEXT
5300 RETURN
5500 REM <CTRL-0x0a>enter value<CTRL-0x0a>
5510 H = PEEK(36) +1:V = PEEK(37) +1
5515 GOTO 5580
5520 VTAB V: HTAB H: PRINT VA; SPC( 4 - LEN( STR$(VA)))
5530 GOSUB 5900
5540 VTAB V: HTAB H: PRINT VA"< "
5550 GOSUB 5900: IF PEEK(49152) <128 THEN 5520
5560 GET K$
5565 IF K$ = CHR$(27) THEN 6500
5570 IF K$ = CHR$(11) OR K$ = "=" OR K$ = "+" OR K$ = CHR$(21) THEN VA = VA +1: GOTO 5580
5575 IF K$ = CHR$(10) OR K$ = "-" OR K$ = CHR$(8) THEN VA = VA -1: GOTO 5580
5577 IF K$ > = "0" AND K$ < = "9" THEN 5700
5578 IF K$ = CHR$(13) THEN 5595
5579 GOSUB 4000
5580 IF VA >TV -1 THEN VA = TV -1: GOSUB 4000: GOTO 5520
5585 IF VA <BV +1 THEN VA = BV +1: GOSUB 4000: GOTO 5520
5590 GOTO 5540
5595 VTAB V: HTAB H: PRINT VA" "
5597 RETURN
5700 REM <CTRL-0x0a>enter data<CTRL-0x0a>
5710 VA$ = K$
5720 VTAB V: HTAB H: PRINT VA$; SPC( 4 - LEN(VA$))
5730 GOSUB 5900
5740 VTAB V: HTAB H: PRINT VA$;"_"
5750 GOSUB 5900: IF PEEK(49152) <128 THEN 5720
5760 GET K$: IF K$ = CHR$(13) THEN 5850
5770 IF K$ = CHR$(27) THEN 6500
5780 IF (K$ = "" OR K$ = CHR$(8)) AND LEN(VA$) <2 THEN VA$ = "": GOTO 5720
5790 IF (K$ = "" OR K$ = CHR$(8)) THEN VA$ = LEFT$(VA$, LEN(VA$) -1): GOTO 5720
5800 IF K$ <"0" OR K$ >"9" THEN GOSUB 4000: GOTO 5720
5810 IF LEN(VA$) >2 THEN GOSUB 4000: GOTO 5720
5820 VA$ = VA$ +K$
5830 GOTO 5720
5850 IF VAL(VA$) > = TV OR VAL(VA$) < = BV THEN GOSUB 4000: GOTO 5520
5860 VA = VAL(VA$)
5870 GOTO 5595
5900 FOR PA = 0 TO 15: IF PEEK(49152) <128 THEN NEXT
5910 RETURN
6000 REM <CTRL-0x0a>setup v's<CTRL-0x0a>
6005 FOR I = 0 TO 4:V(I) = 0: NEXT
6010 V(0) = PEEK(LHI)
6020 IF L(V(0)) <2 THEN 6090
6030 FOR I = 1 TO L(V(0)) -1
6040 V(I) = PEEK(LHI +I)
6050 NEXT
6090 RETURN
6500 REM <CTRL-0x0a>Abort!<CTRL-0x0a>
6510 GOSUB 2500
6520 MS$ = "Aborted.": VTAB 21: GOSUB 1000
6525 IF EB = 1 THEN V(0) = 0: RETURN
6530 GOSUB 7000
6540 CALL 54915: GOTO 300
6800 REM <CTRL-0x0a>Print Wait!<CTRL-0x0a>
6810 GOSUB 2500
6820 MS$ = "Please wait. Sorting data..": VTAB 21: GOSUB 1000
6830 RETURN
7000 REM <CTRL-0x0a>printlast<CTRL-0x0a>
7010 GOSUB 800
7020 BB = PT:TB = BB -6: IF TB <1 THEN TB = 1
7030 FOR I = TB TO BB
7040 VTAB (I -TB) *2 +5: HTAB 23
7050 PRINT A$(A(I))
7060 NEXT :HI = BB:LHI = LOC
7070 RETURN
7500 REM <CTRL-0x0a>scrolldown<CTRL-0x0a>
7502 IP = 0
7505 IF HI = PT THEN GOSUB 4000: GOTO 7590
7510 HI = HI +1: IF HI < = BB OR BB = PT THEN I = HI:IP = 1: GOTO 7545
7520 BB = BB +1:TB = BB -6: IF TB <1 THEN TB = 1
7525 IF PT <8 THEN IP = 1
7530 FOR I = BB TO TB STEP -1
7540 VTAB (I -TB) *2 +5: HTAB 23: PRINT SPC( 16)
7545 IF EB = 1 THEN IF I = HI THEN NORMAL
7550 VTAB (I -TB) *2 +5: HTAB 23
7560 PRINT A$(A(I))
7565 INVERSE : IF IP = 1 THEN 7580
7570 NEXT
7580 GOSUB 8500
7590 RETURN
7800 REM <CTRL-0x0a>PRINT'EM DOWN THE ROW<CTRL-0x0a>
7810 FOR I = 5 TO 17 STEP 2: VTAB I: HTAB 23: PRINT SPC( 16): NEXT
7820 FOR I = TB TO BB: VTAB (I -TB) *2 +5: HTAB 23
7830 IF I = HI THEN NORMAL
7840 PRINT A$(A(I))
7850 INVERSE : NEXT
7860 RETURN
8000 REM <CTRL-0x0a>scrollup<CTRL-0x0a>
8002 IP = 0
8005 IF HI = 1 THEN GOSUB 4000: GOTO 8090
8010 HI = HI -1: IF HI > = TB OR TB = 1 THEN I = HI:IP = 1: GOTO 8045
8020 BB = BB -1:TB = BB -6: IF TB <1 THEN TB = 1
8030 FOR I = TB TO BB
8040 VTAB (I -TB) *2 +5: HTAB 23: PRINT SPC( 16)
8045 IF EB = 1 THEN IF I = HI THEN NORMAL
8050 VTAB (I -TB) *2 +5: HTAB 23
8060 PRINT A$(A(I))
8065 INVERSE : IF IP = 1 THEN 8080
8070 NEXT
8080 GOSUB 8500
8090 RETURN
8500 REM <CTRL-0x0a>PRINT HI #<CTRL-0x0a>
8510 VTAB 4: HTAB 35: PRINT " ": VTAB 4: HTAB 35: PRINT HI
8520 RETURN
9000 REM <CTRL-0x0a>poke it in ml<CTRL-0x0a>
9010 FOR I = 0 TO 4
9020 IF V(I) < >0 THEN POKE LOC,V(I):LOC = LOC +1
9025 PV(V(0),I) = V(I)
9030 POKE TEST +4 +I,V(I)
9040 NEXT
9050 LHI = LOC: FOR I = 0 TO 4: POKE LOC +I,0: NEXT
9060 CALL TEST
9070 RETURN
9200 REM <CTRL-0x0a>poke it in memory & play it<CTRL-0x0a>
9210 FOR I = 0 TO 4
9220 IF V(I) < >0 THEN POKE LHI +I,V(I)
9225 PV(V(0),I) = V(I)
9230 POKE TEST +4 +I,V(I)
9240 NEXT
9250 CALL TEST
9260 RETURN
9500 REM <CTRL-0x0a>play routine<CTRL-0x0a>
9505 GOSUB 2500:MS$ = "Playing Routine..": VTAB 21: GOSUB 1000
9510 CALL GO
9520 RETURN
9900 REM <CTRL-0x0a>Edit preset<CTRL-0x0a>
9980 EB = 1
9990 LHI = LOC -L(A(PT))
10000 REM <CTRL-0x0a>Edit routines<CTRL-0x0a>
10005 IF PT = 0 THEN 10999
10020 GOSUB 2800
10040 GOSUB 10900
10050 IF K$ = CHR$(8) OR K$ = CHR$(11) THEN GOSUB 8000:LHI = LHI -L(A(HI)): IF LHI <GO +4 THEN LHI = GO +4
10060 IF K$ = CHR$(21) OR K$ = CHR$(10) THEN LHI = LHI +L(A(HI)): GOSUB 7500: IF LHI >LOC -1 THEN LHI = LHI -L(A(PT))
10065 IF K$ = "<" OR K$ = "," THEN 10700
10067 IF K$ = ">" OR K$ = "." THEN 10800
10070 IF K$ = "I" THEN 10200
10080 IF K$ = "D" THEN 10400
10090 IF K$ = CHR$(13) THEN 10600
10100 IF K$ = CHR$(27) THEN GOSUB 7000: GOTO 10999
10110 IF K$ < > CHR$(8) AND K$ < > CHR$(11) AND K$ < > CHR$(10) AND K$ < > CHR$(21) THEN GOSUB 4000
10120 GOTO 10040
10200 REM <CTRL-0x0a>INSERT<CTRL-0x0a>
10201 NORMAL : GOSUB 10970
10205 S = 1
10210 TS = 8: INVERSE : VTAB 14: HTAB 3: PRINT " "A$(10)" "
10220 GOSUB 2000:MS$ = "Making insert at sound #" + STR$(HI): GOSUB 1000
10230 FOR I = 0 TO 4:V(I) = 0: NEXT
10240 GOSUB 3000
10250 IF K$ = CHR$(27) THEN GOSUB 6500: GOTO 10380
10260 V(0) = S: GOSUB 5000
10270 IF V(0) = 0 THEN 10380
10280 GOSUB 2500: VTAB 21:MS$ = "Inserting. Please Wait..": GOSUB 1000
10290 FOR I = LOC TO LHI STEP -1
10300 POKE I +L(V(0)), PEEK(I): NEXT
10310 LOC = LOC +L(V(0))
10320 FOR I = LOC TO LOC +4: POKE I,0: NEXT
10330 GOSUB 9200
10340 FOR I = PT TO HI STEP -1:A(I +1) = A(I): NEXT
10350 PT = PT +1:A(HI) = V(0)
10360 BB = TB +6: IF BB >PT THEN BB = PT
10370 GOSUB 7800
10380 NORMAL : VTAB 14: HTAB 3: PRINT " "A$(10)" ": INVERSE : VTAB 4 +S: HTAB 3: PRINT " "A$(S)" "
10390 GOTO 10000
10400 REM <CTRL-0x0a>DELETE<CTRL-0x0a>
10405 NORMAL : GOSUB 10970
10410 GOSUB 2500: VTAB 21:MS$ = "Deleting. Please wait..": GOSUB 1000
10420 FOR I = LHI TO LOC
10430 POKE I, PEEK(I +L(A(HI)))
10440 NEXT
10450 LOC = LOC -L(A(HI))
10460 FOR I = LOC TO LOC +4: POKE I,0: NEXT
10470 FOR I = HI TO PT -1
10480 A(I) = A(I +1)
10490 NEXT
10500 A(PT) = 0:PT = PT -1
10510 IF PT <BB THEN BB = PT:TB = BB -6: IF TB <1 THEN TB = 1
10520 IF BB <HI THEN HI = BB
10530 GOSUB 7800: GOTO 10000
10600 REM <CTRL-0x0a>EDIT<CTRL-0x0a>
10605 NORMAL : GOSUB 10970
10610 GOSUB 6000
10620 GOSUB 5000
10630 IF V(0) = 0 THEN 10650
10640 GOSUB 9200
10650 GOTO 10000
10700 REM <CTRL-0x0a>pageup<CTRL-0x0a>
10702 GOSUB 2500:MS$ = "Page up.": VTAB 21: GOSUB 1000
10705 TH = HI -1
10710 TB = TB -7:HI = HI -7
10720 IF TB <1 THEN TB = 1
10730 IF HI <1 THEN HI = 1
10740 BB = TB +6
10750 IF BB >PT THEN BB = PT
10755 IF TH <HI THEN GOSUB 4000: GOTO 10790
10760 FOR I = TH TO HI STEP -1
10770 LHI = LHI -L(A(I)): NEXT
10775 GOSUB 8500
10780 GOSUB 7800
10790 GOTO 10000
10800 REM <CTRL-0x0a>pagedown<CTRL-0x0a>
10802 GOSUB 2500:MS$ = "Page down.": VTAB 21: GOSUB 1000
10805 TH = HI
10810 BB = BB +7:HI = HI +7
10820 IF BB >PT THEN BB = PT
10830 IF HI >PT THEN HI = PT
10840 TB = BB -6
10850 IF TB <1 THEN TB = 1
10855 IF TH = HI THEN GOSUB 4000: GOTO 10890
10860 FOR I = TH TO HI -1
10870 LHI = LHI +L(A(I)): NEXT
10880 GOSUB 7800
10885 GOSUB 8500
10890 GOTO 10000
10900 REM <CTRL-0x0a>FLASHING GETBOX2<CTRL-0x0a>
10910 NORMAL : GOSUB 10970
10920 FOR PA = 0 TO 15: IF PEEK(49152) <128 THEN NEXT
10930 INVERSE : GOSUB 10970
10940 FOR PA = 0 TO 15: IF PEEK(49152) <128 THEN NEXT : GOTO 10910
10950 GET K$: IF K$ >"Z" THEN K$ = CHR$( ASC(K$) -32)
10960 RETURN
10970 VTAB (HI -TB) *2 +5: HTAB 23: PRINT A$(A(HI)): INVERSE : RETURN
10999 EB = 0:S = 10: RETURN
11000 REM <CTRL-0x0a>disk options<CTRL-0x0a>
11002 EB = 1
11005 CALL BOX,22,3,18,16
11010 HOME : PRINT " Disk Options:"
11015 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24: HOME
11020 GOSUB 2000
11045 FOR D = 1 TO 6: GOSUB 11225: NEXT
11050 D = 1
11055 GOSUB 11245
11060 IF DD$ = CHR$(8) OR DD$ = CHR$(11) THEN D = D -1: IF D <1 THEN D = 6
11065 IF DD$ = CHR$(21) OR DD$ = CHR$(10) THEN D = D +1: IF D >6 THEN D = 1
11070 IF DD$ = CHR$(27) THEN 11090
11075 IF DD$ < > CHR$(13) THEN 11055
11080 ON D GOTO 11280,11395,11545,11610,11610,11090
11085 GOTO 11055
11090 REM <CTRL-0x0a>exit disk options<CTRL-0x0a>
11092 EB = 0
11095 CALL 54915
11100 GOSUB 7000
11105 GOTO 300
11110 REM <CTRL-0x0a>enter nt$<CTRL-0x0a>
11115 NT$ = "SND."
11120 VT = PEEK(37) +1
11125 VTAB VT: HTAB 3: PRINT ">"NT$;" " CHR$(8) CHR$(8);
11130 GOSUB 11590
11135 IF DD$ < > CHR$(8) AND DD$ < >"" THEN 11155
11140 IF LEN(NT$) <2 THEN VTAB VT:NT$ = "": GOTO 11120
11145 NT$ = LEFT$(NT$, LEN(NT$) -1)
11150 GOTO 11125
11155 IF DD$ >"Z" THEN DD$ = CHR$( ASC(DD$) -32)
11160 IF DD$ = "/" AND D = 3 THEN 11185
11163 IF DD$ = "$" AND D = 2 AND NT$ = "" THEN 11185
11165 IF DD$ = CHR$(13) THEN RETURN
11170 IF DD$ = CHR$(27) THEN NT$ = "": GOSUB 6500: RETURN
11175 IF NT$ < >"" THEN IF DD$ > = "0" AND DD$ < = "9" OR DD$ = "." THEN 11185
11180 IF DD$ <"A" THEN GOSUB 4000: GOTO 11125
11185 IF LEN(NT$) <LL THEN NT$ = NT$ +DD$
11190 GOTO 11125
11195 REM <CTRL-0x0a>error<CTRL-0x0a>
11200 POKE 216,0
11202 POKE GO +1,0: POKE GO +2,101
11205 PRINT CHR$(4)"CLOSE"
11210 GOSUB 2500: VTAB 21:MS$ = "There was an error.": GOSUB 1000
11215 FOR PA = 0 TO 100: IF PEEK(49152) <128 THEN NEXT
11220 GOSUB 2000: GOTO 11055
11225 REM <CTRL-0x0a>center in rt box<CTRL-0x0a>
11230 VTAB 6 +D: HTAB 23 +(16 - LEN(DD$(D)))/2
11235 PRINT DD$(D)
11240 RETURN
11245 REM <CTRL-0x0a>get baby<CTRL-0x0a>
11250 NORMAL : GOSUB 11225
11255 FOR PA = 0 TO 15: IF PEEK(49152) <128 THEN NEXT
11260 INVERSE : GOSUB 11225
11265 FOR PA = 0 TO 15: IF PEEK(49152) <128 THEN NEXT : GOTO 11250
11270 GET DD$
11275 RETURN
11280 REM <CTRL-0x0a>load<CTRL-0x0a>
11285 GOSUB 2500:MS$ = "A)ppend file to existing routine, ": VTAB 20: GOSUB 1000
11290 MS$ = "C)lear memory before loading file.": GOSUB 1000
11295 HTAB 4: PRINT "Choose one: ";
11300 GOSUB 11590:CM = 0
11305 IF DD$ = "A" OR DD$ = "a" THEN 11330
11310 IF DD$ = CHR$(27) THEN GOSUB 6500: GOSUB 2000: GOTO 11055
11315 IF DD$ < >"c" AND DD$ < >"C" THEN GOSUB 4000: GOTO 11300
11320 CM = 1
11330 GOSUB 2500: VTAB 20: HTAB 4: PRINT "Load:":LL = 15
11335 GOSUB 11110
11340 IF NT$ = "" THEN GOSUB 2000: GOTO 11055
11343 IF CM = 1 THEN GOSUB 4500
11345 ONERR GOTO 11195
11350 PRINT CHR$(4)"BLOAD"NT$",A"LOC
11355 POKE 216,0: GOSUB 6800
11360 LOC = LOC +4:LHI = LOC
11365 IF PEEK(LOC) = 0 THEN 11380
11370 PT = PT +1:A(PT) = PEEK(LOC)
11375 LOC = LOC +L(A(PT)): GOTO 11365
11380 FOR I = LHI TO LOC +4: POKE I -4, PEEK(I): NEXT
11382 LOC = LOC -4:HI = PT:LHI = LOC
11385 GOSUB 2000
11390 GOTO 11055
11395 REM <CTRL-0x0a>save<CTRL-0x0a>
11400 GOSUB 2500
11405 MS$ = "Save - Where will the library index": VTAB 20: GOSUB 1000
11410 MS$ = "be loaded? (This is necessary!)": GOSUB 1000
11415 VTAB 22:LL = 5:NT$ = "$6500": GOSUB 11120
11420 IF NT$ = "" THEN GOSUB 2000: GOTO 11055
11425 IF LEFT$(NT$,1) < >"$" THEN GOSUB 4000: GOTO 11415
11430 IF LEN(NT$) <4 THEN GOSUB 4000: GOTO 11415
11435 FOR I = 2 TO LEN(NT$): IF MID$ (NT$,I,1) <"0" OR MID$ (NT$,I,1) >"F" OR MID$ (NT$,I,1) >"9" AND MID$ (NT$,I,1) <"A" THEN GOSUB 4000: GOTO 11415
11438 NEXT
11440 IF LEN(NT$) = 4 THEN NT$ = "$0" + RIGHT$(NT$,3)
11445 AD$ = RIGHT$(NT$,4): GOSUB 1500
11450 IF ADDR = 0 THEN 11415
11455 GOSUB 2500: VTAB 20: HTAB 4: PRINT "Library loaded at: A$"AD$", A"ADDR
11460 HTAB 4: PRINT "Is this ok?";
11465 GOSUB 11590
11470 IF DD$ = "Y" OR DD$ = "y" THEN 11485
11475 IF DD$ < >"n" AND DD$ < >"N" THEN GOSUB 4000: GOTO 11465
11480 GOTO 11395
11485 GOSUB 2500: VTAB 20: HTAB 4: PRINT "Save:":LL = 15
11490 GOSUB 11110
11495 IF NT$ = "" THEN GOSUB 2000: GOTO 11055
11500 ONERR GOTO 11195
11505 GOSUB 3500
11510 POKE GO +1,LB: POKE GO +2,HB
11515 PRINT CHR$(4)"bsave"NT$",a$6600,l"LOC +3 -GO
11516 POKE 216,0
11518 POKE GO +1,0: POKE GO +2,101
11520 GOSUB 2500: VTAB 20: HTAB 4: PRINT "Library: A$"AD$", Soundplay: A$300"
11525 MS$ = "Load " +NT$ +" anywhere else!": GOSUB 1000
11530 MS$ = "Please press a key to continue.": GOSUB 1000
11535 POKE 49168,0: GET DD$
11540 GOSUB 2000: GOTO 11055
11545 REM <CTRL-0x0a>prefix<CTRL-0x0a>
11546 GOSUB 2500: VTAB 20:MS$ = "Prefix.": GOSUB 1000
11548 MS$ = "Set P)refix, or S)lot and drive?": GOSUB 1000
11550 HTAB 4: PRINT "Choose (P/S):";
11552 GOSUB 11590: IF DD$ = "P" OR DD$ = "p" THEN 11567
11554 IF DD$ = CHR$(27) THEN GOSUB 6500: GOTO 11582
11555 IF DD$ < >"S" AND DD$ < >"s" THEN GOSUB 4000: GOTO 11552
11557 GOSUB 2500: VTAB 20:MS$ = "Set Slot and drive.": GOSUB 1000
11558 HTAB 4: PRINT "Slot: ";
11559 GOSUB 11590: IF DD$ = CHR$(27) THEN GOSUB 6500: GOTO 11582
11560 IF VAL(DD$) <1 OR VAL(DD$) >7 THEN GOSUB 4000: GOTO 11559
11561 SL = VAL(DD$): PRINT SL: HTAB 4: PRINT "Drive:";
11562 GOSUB 11590: IF DD$ = CHR$(27) THEN GOSUB 6500: GOTO 11582
11563 IF VAL(DD$) <1 OR VAL(DD$) >2 THEN GOSUB 4000: GOTO 11562
11564 DR = VAL(DD$): PRINT DR
11565 ONERR GOTO 11195
11566 PRINT CHR$(4)"prefix,s"SL",d"DR: GOTO 11582
11567 GOSUB 2500: VTAB 20: HTAB 4: PRINT "Prefix:":LL = 35: VTAB 20
11568 ONERR GOTO 11195
11570 PRINT CHR$(4)"Prefix": INPUT NT$
11573 IF LEN(NT$) > = LL THEN NT$ = ""
11575 GOSUB 11120
11577 IF NT$ = "" THEN 11582
11580 PRINT CHR$(4)"Prefix"NT$
11582 GOSUB 2000
11583 POKE 216,0
11585 GOTO 11055
11590 REM <CTRL-0x0a>Give me a cursor!<CTRL-0x0a>
11595 FOR PA = 1 TO LEN(CS$): PRINT MID$ (CS$,PA,1) CHR$(8);: FOR PP = 0 TO 15: IF PEEK(49152) <128 THEN NEXT : NEXT : GOTO 11595
11600 GET DD$
11605 RETURN
11610 REM <CTRL-0x0a>cat<CTRL-0x0a>
11613 GOSUB 2500: VTAB 21:MS$ = "Checking disk..": GOSUB 1000
11615 NR = 0
11620 PRINT CHR$(4)"prefix"
11625 INPUT NT$
11630 CALL BOX,22,3,18,16
11633 HOME
11634 IF D = 5 THEN PRINT " Catalog of": PRINT " directories:": GOTO 11650
11635 PRINT "Catalog of SND."
11640 PRINT " files:"
11650 POKE 216,0
11655 ONERR GOTO 11705
11660 PRINT CHR$(4)"open"NT$",tdir"
11665 PRINT CHR$(4)"read"NT$
11670 INPUT K$: INPUT K$:NF = 0
11675 PRINT
11680 INPUT K$
11683 IF D = 5 THEN IF MID$ (K$,18,3) < >"DIR" THEN 11680
11684 IF D = 5 THEN 11690
11685 IF LEFT$(K$,5) < >" SND." THEN 11680
11690 NF = NF +1: IF NF/10 = INT(NF/10) THEN GOSUB 11735
11695 HTAB 1: PRINT LEFT$(K$,16);
11700 GOTO 11680
11705 POKE 216,0
11710 PRINT CHR$(4)"close"
11715 IF D = 5 AND NF = 0 THEN PRINT " No directories.": GOTO 11720
11716 IF NF = 0 THEN PRINT " No files."
11720 NR = 1
11725 GOSUB 11735
11730 GOTO 11000
11735 PRINT : PRINT " Press any key.": PRINT CHR$(4): GET DD$
11740 CALL BOX,22,3,18,16
11745 IF NR = 1 THEN 11755
11750 HOME : PRINT CHR$(4)"read"NT$
11755 RETURN
12000 REM <CTRL-0x0a>Clear routine<CTRL-0x0a>
12005 EB = 1
12010 GOSUB 2500
12020 VTAB 20:MS$ = "Clear routine in memory": GOSUB 1000
12030 HTAB 4: PRINT "Are you sure you want to do this?";
12040 GOSUB 11590
12050 IF DD$ = "N" OR DD$ = "n" THEN GOSUB 6500: GOTO 12080
12060 IF DD$ < >"Y" AND DD$ < >"y" THEN GOSUB 4000: GOTO 12040
12065 GOSUB 6800
12070 FOR I = 1 TO PT:A(I) = 0: NEXT
12075 HI = 0:PT = 0:TB = 0:BB = 0:LOC = GO +4: FOR I = 0 TO 4: POKE LOC +I,0: NEXT
12078 GOSUB 7000
12080 EB = 0
12090 RETURN
13000 REM <CTRL-0x0a>Quit?<CTRL-0x0a>
13005 EB = 1
13010 GOSUB 2500
13020 MS$ = "Exit to Soundmaker II.": VTAB 20: GOSUB 1000
13030 HTAB 4: PRINT "Are you sure you want to quit?";
13040 GOSUB 11590
13050 IF DD$ = "N" OR DD$ = "n" THEN GOSUB 6500: GOTO 13080
13060 IF DD$ < >"y" AND DD$ < >"Y" THEN GOSUB 4000: GOTO 13040
13070 GOSUB 2500: VTAB 21:MS$ = "Thanks for using Soundmaker.": GOSUB 1000
13072 POKE 49168,0
13075 FOR PA = 0 TO 100: IF PEEK(49152) <128 THEN NEXT
13077 PRINT CHR$(4)"bye"
13080 EB = 0
13090 RETURN
14000 REM <CTRL-0x0a>title page<CTRL-0x0a>
14010 CALL BOX,1,1,40,24
14015 HOME :MS$ = "Softdisk Presents..": GOSUB 1000
14020 CALL BOX,14,4,15,3
14025 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24
14030 MS$ = "Soundmaker II": GOSUB 1000
14040 PRINT CHR$(4)"BLOADSND.START.TUNE,A"LOC
14050 PRINT : PRINT : PRINT :MS$ = "by": GOSUB 1000
14060 PRINT : PRINT :MS$ = "Tom Hall and": GOSUB 1000
14070 PRINT :MS$ = "Bryan Vekovius": GOSUB 1000
14080 PRINT : PRINT :MS$ = "Softdisk is not public domain.": GOSUB 1000
14090 PRINT :MS$ = "Please respect the author's rights.": GOSUB 1000
14095 VTAB 22:MS$ = "Copyright (c) 1988 by Softdisk, inc.": GOSUB 1000
14100 CALL LOC
14110 VTAB 22:MS$ = " ": GOSUB 1000: VTAB 22:MS$ = "Please press a key.": GOSUB 1000
14120 GET K$
14125 VTAB 22:MS$ = " Please wait.. ": GOSUB 1000
14130 RETURN
59999 REM <CTRL-0x0a>data<CTRL-0x0a>
60000 DATA White noise
60010 DATA Regular tone
60020 DATA Ascending tone
60030 DATA Descending tone
60040 DATA Hummy tone
60050 DATA Ascending hummy
60060 DATA Descending hummy
60070 DATA Add pause
60080 DATA Play routine
60090 DATA Edit routine
60100 DATA Disk options
60110 DATA Clear routine
60120 DATA Quit
60200 DATA 1,3,4,4,3,4,4,2
60300 DATA Pitch
60310 DATA Duration
60320 DATA Start Pitch
60330 DATA End Pitch
60340 DATA Note Length
60350 DATA Pause Length
60400 DATA 20,4,21,3,21,21,22,3
60500 DATA Load Routine
60510 DATA Save Routine
60520 DATA Set Prefix
60530 DATA Catalog disk
60535 DATA Directories
60540 DATA Exit